![loading...](doc/midia/demo_screenshot.png?raw=true "loading...")
+ Project status: 2025/Apr - __active__

### Notice
+ We are not ready to receive extensive outside contribution to the project at this point, but it would still be nice to
  receive opinions and suggestions.
~~+ We will try to keep the master branch as the stable one, keeping the most experimental iterations at the dev branch.~~


Arcade Fighter Demo
==============
The Arcade Fighter Demo is a tutorial/exemple on how to use the Arcade Fighter Engine.

For brevity, every time we reference to the _Demo_, we are talking about this exemple tutorial; And when we say _Library_
or _Engine_, we are talking about the lower level code necessary to make the Demo work, AKA. the part of the code you
would need to build your games.

You can find specific information on the engine [here](lib/ArcadeFighter/README.md).

It is __NOT__ in any way or form intended to be a state of the art game, it is offered as is with no guaranties, with the
hopes that it will demonstrate the ins and outs of our engine and offer a sandbox where beginners may play around, maybe
build their own games upon.

For now, this is a "programmers oriented" project, since there is A LOT to be done just in that sense, but we will
eventually implement some features and tools to make life more enjoyable for game designers, graphical artist, sound
programmers, etc.

The true power of this project though is way way other than building good games! Not at all!

We intend on tricking you into learning and even to study of your own volition (gasp).

_(NotABug doesn't seam to support video in the readme section, so click the link to see a quick demo!)_

![demo_video](doc/midia/demo_video.mkv "demo_video")


### Dependencies
The following list of dependencies are for a clean Debian 12 installation, it should be very similar to any other distro.

Be sure your graphics card drivers are updated, check the OpenGl version with `glxinfo | grep "OpenGL version"`. If you
want asynchronous error logging for OpenGl, the minimal version is 4.3 , but it can be downgraded to a lesser version
otherwise (you will need to generate a different glad version though).

Accept any extra dependencies the package manager asks to download.

    sudo apt-get install build-essential libsdl2-dev libsdl2-mixer-dev libglm-dev libfmt-dev

Optional packages:

    sudo apt-get install git doxygen


### Cloning the repository
Since this is a project under heavy development with no intent to be a professional solution, we don't recommend that
you clone the master branch (which would be vary bad for your sanity and faith in humankind), instead, download the
source files directly or checkout a specific stable tag, since methods may change signatures without warning or even
entire classes be refactored between updates.

We do hope to one day get to a state of completion, in which we can be satisfied by our initial assumptions and ongoing
design choices, but this is not that day...

Anyway, the following command will clone the repository. Change to the directory you want it to be download to (the
actual repository directory will be created by git) and be sure [git](https://git-scm.com/doc) is installed.

    git clone https://notabug.org/TooOld2Rock-nRoll/ArcadeFighterDemo.git


## How to use the project
The project file structure should be simple to follow for anyone with a little of C/C++ programming experience. Our Demo
is implemented at the root of the project, the ArcadeFighter Library itself is inside the [/lib](lib/) directory and can
be compiled as a standalone static library to be linked in your own projects.

We are assuming most people will try to build a fighting game in the stile of arcade games like Street Fighter, King
of Fighters or Samurai Showdown. If you are starting with game development, take some time to follow the examples
already provided and pay attention specially to the sub classes and base classes' comment sections, there are many
external resources that can help you in your present and future endeavors. Just play around until something breaks,
try to modify the characters behavior, the sprite sheets, experiment with different game loop regimes and, eventually,
build something yours just by substituting our content with your own.

More advanced users will probably just take a look at the ins and outs and discard the example altogether. The important
bits are the startup sequence, the loading procedures and abstract methods in most base classes. All the code is well
documented and have specif examples of how to deal with each class isolated. In all honest, all classes, even classes
like ArcadeFighter (the highest level class that makes sure everything starts up correctly), are just suggestions of how
it could be done in your own game.

But there is more! Those are just means to an end, we really want to trick you into being a better [programmer |
architect | designer | artist | musician?] and this project offers lots and lots of opportunities for you to dive into
any of those subjects at any time.


## Compiling
This library was designed and developed having GNU/Linux and FOSS in mind, you can manage to compile and run under
Windows within [WSL](https://learn.microsoft.com/en-us/windows/wsl/install) in fairly the same manner, but it remains
untested under macOS.

The following instructions are for building the ArcadeFighter Demo, which is a brief tutorial/suggestion on how to start
developing your game using our engine. If you just wish to build the ArcadeFighter Library for your own game, you can
find more info [here](lib/ArcadeFighter/README.md). And if you intend on actively repurpose/tweaking the engine, just
mimic our Makefiles for easy merging with your own project.

~~The command `make [-h | --help]` should output a complete list of accepted options to use.~~

Calling `make [name=bin_name] -j all` will compile the Demo and its dependencies, generating a binary (with optional
given name) at the root of the project. We recommend the use of the **-j** parameter to the make command as to speed up
the build using all the available CPU cores/threads.

If you did not alter the code in any form and encountered errors during compilation, take a look at the previous list
of dependencies and check they are all correctly installed in your system. ~~If the error persists, check the
troubleshooting list at the end.~~


## Main Author
Most of ArcadeFighter was created by André Frazatto (AKA TooOld2Rock'nRoll)


## Credits
This project would not be possible without people like [Joey de Vries](https://joeydevries.com/#home) from
[LearnOpenGL](https://learnopengl.com/) and [Bob Nystrom](https://journal.stuffwithstuff.com/) from
[Game Programming Patterns](https://gameprogrammingpatterns.com/) that generously donated their experience and time to
build those resources and offer it online for free, helping to inspire countless others like myself.


## License
> The ArcadeFighter Demo is free software: you can redistribute it and/or modify it under the terms of the GNU General
> Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any
> later version.
>
> The ArcadeFighter Demo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
> implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
> more details.
>
> You should have received a copy of the GNU General Public License along with this program. If not,
> see <https://www.gnu.org/licenses/>.

The ArcadeFighter Demo depends on the ArcadeFighter Library, which is also distributed under GLP3, you can find more
info [here](lib/ArcadeFighter/README.md)

Licence information for images, asset packs, sounds, etc., can be found at the same directory those files are at the
[/res](res/) directory.

(If you don't understand the point of these licenses and don't understand the difference between _Open Source_ and _Free
Open Source Software_ (or FOSS for short), this may be a good reading [The GNU Project](https://www.gnu.org/gnu/thegnuproject.html))


## How to Contribute to the Project
Having a hard time going around or just really like ArcadeFighter? Let us know, say hi on our
~~[Subreddit](create one!)~~, your experience may help us make this project more friendly.

Found a bug or need advice? Don't be shy, open a ticket
[here](https://notabug.org/TooOld2Rock-nRoll/ArcadeFighterDemo/issues), we may even be able to do something about it,
eventually....

~~If you know your way around Git,there is even more you can do:~~
~~+ Our documentation is lacking? Think you can do better? Go for it.~~
~~+ All the Todos are listed at the class' header files and vary from simple patches to complete new feature, just find
one to call your own.~~

~~Fork the dev branch and send that pull request our way, just remember we may not agree on the solution, be open to
suggestions and ALWAYS follow the coding style guide [here](link for the style guide).~~


## Contact
If your problem or subject can't be solved through one of our other social links, you can get in contact through
<arcadefighter_dev@riseup.net>, we just can't promise to return your e-mail in timely fashion.


---
This is `README.md` for the ArcadeFighter Demo.

